class Matrix:
    def __init__(self, m):
        # 构造一个方阵
        self.matrix = m
        #- 它接收一个二维列表 `m` 作为参数，并将其赋值给实例变量 `self.matrix`

    def __add__(self, other):
        # 求方阵 self 和 other 的和
        n = len(self.matrix)
        m = [[0] * n for _ in range(n)]
        #- 首先计算矩阵的维度 `n`，然后初始化一个新的矩阵 `m`：n*n的矩阵 用于存储结果
        for i in range(n):
            for j in range(n):
                m[i][j] = self.matrix[i][j] + other.matrix[i][j]
                #相加后赋值
        return Matrix(m)
#- 返回一个新的 `Matrix` 对象，包含加法的结果

    def __sub__(self, other):
        # 求方阵 self 和 other 的差
        n = len(self.matrix)
        m = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(n):
                m[i][j] = self.matrix[i][j] - other.matrix[i][j]
        return Matrix(m)

    def __mul__(self, other):
        # 求方阵 self 和 other 的矩阵乘法
        if len(self.matrix[0]) != len(other.matrix):
            raise ValueError("矩阵的列数必须与另一个矩阵的行数相等")

        result = [[0] * len(other.matrix[0]) for _ in range(len(self.matrix))]
        #初始化一个用于存储矩阵乘法结果的二维列表 result

        for i in range(len(self.matrix)):#遍历第一个矩阵的每一行
            for j in range(len(other.matrix[0])):#遍历第二个矩阵的每一列

                for k in range(len(other.matrix)):#每一列的每一个元素（每一行里的每一列）
                    result[i][j] += self.matrix[i][k] * other.matrix[k][j]#a[ij]==a[i]行内元素++*a[j]列内部所有元素++
        return Matrix(result)#将得到的结果二维列表 result 作为参数传递给 Matrix 类的构造函数

    def __str__(self):
        # 定义方阵的输出格式
        return str(self.matrix)


if __name__ == "__main__":
    #创建两个（方阵）矩阵
    a = Matrix([[1, 2], [3, 4]])
    b = Matrix([[5, 6], [7, 8]])
    #对应的函数操作后打印
    print('a + b 的结果为：', a + b)
    print('a - b 的结果为：', a - b)
    print('a * b 的结果为：', a * b)
